#pragma once
#include <string>

//任务参数逻辑
enum class TaskParaOpt
{
	NONE = 0,
	EQUAL = 1,      //TaskMgr::Update的参数 == 配置参数
	GREATER = 2,    //TaskMgr::Update的参数 >= 配置参数
	LESS = 3,       //TaskMgr::Update的参数 <= 配置参数
};
//task类型，值作为数组索引
enum class TaskType
{
	KILL_MONSTER = 0,
	GET_MONEY,
	LV,
	GET_QUALITY_ITEM,
	GET_ITEM,
	KILL_MONSTER2,
	MAX_LEN,
};

// 模板类，用于存储每个 TaskType 对应的静态信息
//默认就是不需要paraX判断，任务进度 是累加值, 比如 TaskType::GET_MONEY
template <TaskType T>
struct TaskTypeInfo
{
	static constexpr const TaskParaOpt PARA_OPT_LIST = {}; 
	static constexpr bool IS_ABSOLUTE = false; 
};

//input para0== cfg para0，任务进度 是累加值
template <>
struct TaskTypeInfo<TaskType::KILL_MONSTER> {
	static constexpr const TaskParaOpt PARA_OPT_LIST[] = {TaskParaOpt::EQUAL};
	static constexpr bool IS_ABSOLUTE = false;
};

// input para0== cfg para0，任务进度 是绝对值
template <>
struct TaskTypeInfo<TaskType::KILL_MONSTER2>
{
	static constexpr const TaskParaOpt PARA_OPT_LIST[] = {TaskParaOpt::EQUAL};
	static constexpr bool IS_ABSOLUTE = true;
};

// 任务进度是绝对值
template <>
struct TaskTypeInfo<TaskType::LV>
{
	static constexpr const TaskParaOpt PARA_OPT_LIST = {}; 
	static constexpr bool IS_ABSOLUTE = true;
};

// 获取id物品， >= 品质
template <>
struct TaskTypeInfo<TaskType::GET_QUALITY_ITEM>
{
	static constexpr const TaskParaOpt PARA_OPT_LIST[] = {TaskParaOpt::EQUAL, TaskParaOpt::GREATER};
	static constexpr bool IS_ABSOLUTE = false;
};

template <>
struct TaskTypeInfo<TaskType::GET_ITEM>
{
	static constexpr const TaskParaOpt PARA_OPT_LIST[] = {TaskParaOpt::EQUAL};
	static constexpr bool IS_ABSOLUTE = false;
};
	